
// 观察者模型是，一个被观察的对象，可以有多个观察者，当被观察对象发生变化时，会通知所有观察者，观察者可以更新自己的状态。

// 被观察者类
class subJect {
    constructor() {
        this.state ='状态'
        this.observers = [];
    }

    // 添加观察者
    subcribe(observe) {
        this.observers.push(observe);
    }

    // 移除观察者
    unSubscribe(observe) {
        const index = this.observers.indexOf(observe)
        if(index != -1) {
            this.observers.splice(index, 1);
        }
    }

    // 通知观察者
    notify() {
        this.observers.forEach(observe => {
            observe.update(this)
        })
    }

    // 获取状态
    getState() {
        return this.state
    }

    // 设置状态
    setState(state) {
        this.state = state
        this.notify()
    }

}

// 观察者类
class Observer {
    constructor(name) {
        this.name = name
    }

    // 更新状态
    update(subject) {
        console.log(`${this.name} 收到通知，状态为：${subject.getState()}`)
    }
}


// 以老师、家长观察学生为例子
const student = new subJect();
const teacher = new Observer('老师');
const parent = new Observer('家长');

student.subcribe(teacher);
student.subcribe(parent);

student.setState('状态1'); // 老师、家长收到通知，状态为：状态1
student.setState('状态2'); // 老师、家长收到通知，状态为：状态2
